package net.ufrog.common.converters;

import java.math.BigDecimal;

/**
 * @author ultrafrog, ufrog.net@gmail.com
 * @version 0.1, 2017-07-05
 * @since 0.1
 */
public class BigDecimalConverter extends Converter<BigDecimal> {

    @Override
    public BigDecimal convert(Object obj, Object defaultValue) {
        if (obj != null) {
            return toBigDecimal(obj);
        } else if (defaultValue != null) {
            return toBigDecimal(defaultValue);
        } else {
            return null;
        }
    }

    @Override
    public Class<BigDecimal> getType() {
        return BigDecimal.class;
    }

    private BigDecimal toBigDecimal(Object obj) {
        if (obj instanceof BigDecimal) {
            return BigDecimal.class.cast(obj);
        } else if (obj instanceof Number) {
            return BigDecimal.valueOf(Number.class.cast(obj).doubleValue());
        } else {
            return new BigDecimal(String.valueOf(obj));
        }
    }
}
